const models = require(__base + '/models');
const errcode = require(__util + "/errcode")
const ct = require(__util + "/catch"); // 路由错误捕获(不使用则不会捕获异常错误)

module.exports = ct(async (req, res) => {
  const { name, code, version = "1.0.0" } = req.body

  if (!name) {
    return res.json(errcode.PAYMENT_NAME_EMPTY)
  }
  if (!code) {
    return res.json(errcode.PAYMENT_CODE_EMPTY)
  }
  // 判断code只能是英文大小写
  if (!(/^[a-zA-Z]*$/g).test(code)) {
    return res.json(errcode.PAYMENT_CODE_INVALID)
  }
  // 异步检查名称和标识是否已存在
  const [checkNameRet, checkCodeRet] = await Promise.all([
    models.PaymentMethod.findOne({
      where: { name: name }
    })
  ,
    models.PaymentMethod.findOne({
      where: { code: code }
    })
  ])

  if (checkNameRet) {
    return res.json(errcode.PAYMENT_NAME_EXIST)
  }
  if (checkCodeRet) {
    return res.json(errcode.PAYMENT_CODE_EXIST)
  }

  // 创建支付方式
  const result = await models.PaymentMethod.create({
    name: name,
    code: code,
    version: version
  })
  // 利用对象的解构，取出非updatedAt、createdAt的所有字段
  const { updatedAt, createdAt, ...paymentMethodInfo } = result.get({ plain: true })

  res.json(
    errcode.SUCCESS(paymentMethodInfo)
  );
});

// 成功返回
// {
//   "errcode": 0,
//   "errmsg": "success",
//   "data": {
//     "isUsing": false,
//     "id": 10,
//     "name": "微信支付",
//     "code": "wexinpay",
//     "version": "1.0.1"
//   }
// }